import pytest

from calc import add, sub

add_cases = [[1, 2, 3], [-1, -2, -3], [1, 0, 1], [-1, 0, -1]]
sub_cases = [[1, 2, -1], [-1, -2, 1], [1, 0, 1], [-1, 0, -1]]


@pytest.fixture()  # 默认对每个测试函数起作用
def init_calc():
    print('每一条测试用例的初始化')
    yield  # 结束时执行
    print('一条用例执行结束了')


@pytest.mark.parametrize('a,b,expect', add_cases)  # 参数化：执行大量用例
def test_add(init_calc, a, b, expect):  # init_calc是测试固件名字
    actual = add(a, b)  # 实际结果
    assert actual == expect, f'测试失败==预期：{expect}==实际：{actual}'


@pytest.mark.parametrize('a,b,expect', sub_cases)
def test_sub(a, b, expect):  # 不写init_calc，不执行测试固件
    actual = sub(a, b)
    assert actual == expect, f'测试失败==预期：{expect}==实际：{actual}'


if __name__ == '__main__':
    pytest.main(['-sv', '--tb=line', 'ceshi_calc.py'])  # -s是允许执行print  ,--tb=short、--tb=line错误跟踪回溯
